package menagementBean;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import menagement.ListaProdottiBase;
import menagement.dto.EscursioneDTO;
import menagement.dto.HotelDTO;
import menagement.dto.VoloDTO;
import entities.Escursione;
import entities.Hotel;
import entities.Volo;

import javax.persistence.Query;


@Stateless
public class TrovaListe implements ListaProdottiBase{
	
	@PersistenceContext
    private EntityManager em;
	
	@Override
	public ArrayList <EscursioneDTO> ListaEscursioni(int codice){
		
		System.out.println("SONO IN LISTAESCURSIONI, il codice scritto: "+codice); //DA ELIMINARE
		Query v=em.createNamedQuery("Volo.findCittaVoliPerCodice").setParameter("codice", codice);
		List<Volo>ListaVoli=(List<Volo>) v.getResultList();
		
		ArrayList<EscursioneDTO> ListaEscursioniDTO = new ArrayList<EscursioneDTO>();
		
		if(!ListaVoli.isEmpty()){
			
			String citta=ListaVoli.get(0).getCittaArrivo();
			Query q= em.createNamedQuery("Escursione.trovaEscursioniInCitta").setParameter("citta", citta);
			List<Escursione>ListaEscursioni =(List<Escursione>) q.getResultList();
		
			for (int i=0; i<ListaEscursioni.size(); i++)
			{
				System.out.println("Entro nel for, perche esistono escursioni per la citta selezionata"); //DA ELIMINARE
				EscursioneDTO escursione = new EscursioneDTO();
				escursione.setNome(ListaEscursioni.get(i).getNome());
				escursione.setCodice(ListaEscursioni.get(i).getCodice());
				escursione.setDurata(ListaEscursioni.get(i).getDurata());
				escursione.setLuogoPartenza(ListaEscursioni.get(i).getLuogoPartenza());
				escursione.setPrezzo(ListaEscursioni.get(i).getPrezzo());
				escursione.setStagione(ListaEscursioni.get(i).getStagione());
				escursione.setTipologia(ListaEscursioni.get(i).getTipologia());
				escursione.setValido(ListaEscursioni.get(i).isValido());

				ListaEscursioniDTO.add(escursione);
			}
			System.out.println("Fine dell'if"); //DA ELIMINARE

		}
		else
			System.out.println("La lista non ha tornato elementi per il codice immesso");
		
		if(ListaEscursioniDTO.isEmpty())
			System.out.println("Non esistono escursioni per la citta selezionata");
		
		return ListaEscursioniDTO;
	}
	
	@Override
	public ArrayList <HotelDTO> ListaHotel(int codice){
	
		System.out.println("SONO IN LISTAHOTEL, il codice scritto: "+codice); //DA ELIMINARE
		Query v=em.createNamedQuery("Volo.findCittaVoliPerCodice").setParameter("codice", codice);
		List<Volo>ListaVoli=(List<Volo>) v.getResultList();
		ArrayList<HotelDTO> ListaHotelDTO = new ArrayList<HotelDTO>();
		
		if(!ListaVoli.isEmpty()){
			
			String citta=ListaVoli.get(0).getCittaArrivo();
			Query q= em.createNamedQuery("Hotel.trovaHotelInCitta").setParameter("citta", citta);
			List<Hotel>ListaHotel =(List<Hotel>) q.getResultList();
			
			for (int i=0; i<ListaHotel.size(); i++)
			{
				HotelDTO hotel = new HotelDTO();
				
				hotel.setNome(ListaHotel.get(i).getNome());
				hotel.setCodice(ListaHotel.get(i).getCodice());
				hotel.setIndirizzo(ListaHotel.get(i).getIndirizzo());
				hotel.setMail(ListaHotel.get(i).getMail());
				hotel.setN_Stelle(ListaHotel.get(i).getN_Stelle());
				hotel.setPrezzo(ListaHotel.get(i).getPrezzo());
				hotel.setStanze_Disponibili(ListaHotel.get(i).getStanze_Disponibili());
				hotel.setTelefono(ListaHotel.get(i).getTelefono());
				hotel.setCitta(ListaHotel.get(i).getCitta());
				hotel.setValido(ListaHotel.get(i).isValido());

				ListaHotelDTO.add(hotel);
			}
		}
		else
			System.out.println("La lista non ha tornato elementi per il codice immesso");
		
		return ListaHotelDTO;
	}
	
	
	public ArrayList <VoloDTO> ListaVoli(String citta){
		ArrayList<VoloDTO> listaVoliDTO= new ArrayList<VoloDTO>();
		Query k=em.createNamedQuery("Volo.findVoliPerCitta").setParameter("citta", citta);
		List<Volo> lista =  (List<Volo>) k.getResultList();
		if(!lista.isEmpty()){
			for(int i=0; i<lista.size();i++){
				VoloDTO listaFinale = new VoloDTO();
				listaFinale.setAeroportoPartenza(lista.get(i).getAeroportoPartenza());
				listaFinale.setAeroportoArrivo(lista.get(i).getAeroportoArrivo());
				listaFinale.setData(lista.get(i).getData());
				listaFinale.setDurata(lista.get(i).getDurata());
				listaFinale.setPosti_Disponibili(lista.get(i).getPosti_Disponibili());
				listaFinale.setPrezzo(lista.get(i).getPrezzo());
				listaFinale.setCittaPartenza(lista.get(i).getCittaPartenza());
				listaFinale.setCittaArrivo(lista.get(i).getCittaArrivo());
				listaFinale.setCodice(lista.get(i).getCodice());
				listaFinale.setValido(lista.get(i).isValido());
				listaFinale.setDataRitorno(lista.get(i).getDataRitorno());
				
				listaVoliDTO.add(listaFinale);
			}
		}
		else
			System.out.println("La lista voli non ha tornato elementi per la citta immessa");
		
		return listaVoliDTO;
	}
}
